# 验证Python版本 (需3.12+)
import sys
assert sys.version_info >= (3, 12), "需要Python 3.10及以上版本"

# 验证依赖库安装
required_libs = ["requests", "ollama", "langchain", \
                "PyPDF2", "Unstructured",\
                "Markdown","nltk","faiss-cpu","tokenizers"]
for lib in required_libs:
    try:
        __import__(lib)
    except ImportError:
        print(f"缺少必要库: {lib}，请使用 pip install {lib}")
        sys.exit(1)


print(f"必要库已经检查完毕！")

"""
注释说明：

1. 验证Python版本:
   - 检查Python版本是否大于等于3.12 ， 如果小于3.12则退出程序。

2. 验证依赖库安装：
   - 循环遍历所需依赖库列表，检查每个库是否已经安装。
   - 如果某个库未安装，则输出提示信息并退出程序。

3. 输出结果：
   - 如果程序执行到这一步，表示所有依赖库都已经安装，输出提示信息。

requests        : 用于发送HTTP请求的库
ollama          : 用于本地模型部署的库
langchain       : 用于构建智能系统的库
Unstructured    : 数据采集文档解析工具。用于处理各种格式的文档的库，通用文档解析，但是打开特定文件还是需要特定模块，如docx，txt等。无法打开PDF文档
python-docx     : 用于处理Word文档的库，只有安装该模块，Unstructured 才能够打开docx文件
PyPDF2          : 数据采集文档解析工具。用于处理PDF文件的库
Markdown        : 数据采集文档解析工具。用于处理Markdown文件的库    
Chroma          : 用于向量数据库的库
faiss-cpu       : 用于快速搜索的向量库。CPU版本
transformers    : 用于自然语言处理任务的库，提供了对大量预训练模型的支持，涵盖了多种架构，
                  如 BERT、GPT-2、XLNet 等。你可以轻松地加载这些预训练模型，用于不同的任务。
                  不建议使用，该库在加载预训练模型和分词器的时候，始终去访问地址https://huggingface.co，而该地址不可访问
nltk            : 切片工具，用于自然语言处理的库，传统 NLP（Natural Language Toolkit）
                  该工具仅提供了固定句子切片，无法处理复杂句子的切分，如中文句子切分。而且需要另外在运行过程中下载组件，如果网络效果不佳容易产生长时间的等待。
tokenizers      : 切片工具 Hugging Face Tokenizers 用于处理文本的库（支持复杂模型分词策略）
torch           : 用于深度学习模型的库


pdfminer.six    : 用于处理PDF文件的库，只有安装该模块，Unstructured 才能够打开PDF文件；测试结果：无法安装关联模块，如pi_heif。Unstructured无法导入PDF文件
pi_heif         : 用于处理HEIF图片文件的库（无法安装模块）

私有化知识库搭建流程
1、数据采集 : Web 爬取 / 文档解析
2、切片 : 利用成熟 NLP 库
3、向量化 : 调用预训练模型
4、向量库对接 : Chroma 本地部署测试

"""